package kr.co.bettersoft.usedmarketandroid.activity;

import java.io.File;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import kr.co.bettersoft.usedmarketandroid.adapter.UsedMarketChatMessageAdapter;
import kr.co.bettersoft.usedmarketandroid.common.CommonConstant;
import kr.co.bettersoft.usedmarketandroid.common.CommonUtil;
import kr.co.bettersoft.usedmarketandroid.common.UsedMarketChatRest;
import kr.co.bettersoft.usedmarketandroid.common.UsedMarketRest;
import kr.co.bettersoft.usedmarketandroid.domain.UsedMarketChat;
import kr.co.bettersoft.usedmarketandroid.domain.UsedMarketChatMessage;
import kr.co.bettersoft.usedmarketandroid.domain.UsedMarketChatRecognition;
import kr.co.bettersoft.usedmarketandroid.domain.UsedMarketChatUser;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

/**
 * Chat Room
 * 
 * 상대방 메시지는 좌측, 본인 메시지는 우측
 * 
 * 상단 타이틀 : 물품 제목.  제목이 길면 ... 처리
 * 
 * 상대방 프로필 이미지, 글내용
 * 본인 글 내용
 * 
 * 하단 입력란. 좌측 이미지 첨부 버튼 - 새로 촬영, 앨범에서 선택
 * 입력란 우측 '보내기' 버튼 눌러 전송
 * 
 * @author blue
 *
 */
public class UsedMarketChatRoomActivity extends Activity{
	/////////////////////////////////////////////////////////////////////////////////////////////////////
	// 변수

	String TAG = "UsedMarketChatRoomActivity";

	static int REQUEST_PICTURE = 1;			// 사진 가져오기
	static int REQUEST_PHOTO_ALBUM = 2;		// 사진 찍기

	CommonUtil commonUtil = new CommonUtil();

	//static 
	public final int MAX_WIDTH = CommonConstant.UPLOAD_IMAGE_SIZE_BIG;				// 업로드 이미지 큰변 길이 800
	public final int MAX_HEIGHT = CommonConstant.UPLOAD_IMAGE_SIZE_SMALL;			// 업로드 이미지 작은변 길이 600
	String SAMPLEIMG = commonUtil.getNowDateForImage()+".png";  

	public final int COUNT_OF_SHOW_CHAT_MESSAGE_AT_ONE_TIME = 20;				// 한번에 보여줄 메시지 개수 		
	Context mContext = this;
	//button 클릭
	Dialog dialog;

//	public final int SELECT_CHAT_INFORMATION = 301;				// RestSelectChatInformation	// 채팅방 정보얻기	selectChatInformation
	public final int SELECT_USER = 302;							// 채팅방 사용자 고유 키값 받기 + 인지 테이블에 등록 여부 확인하여 등록하기
	
	public final int REGISTER_MESSAGE = 401;		// 메시지 작성.
	public final int REGISTER_MESSAGE_WITH_IMAGE = 402;		// 메시지 + 이미지 작성.
	public final int SELECT_MESSAGE_LIST = 403;		// 메시지 리스트 가져오기. + 메시지 읽음 업데이트
	
	public static Activity usedMarketChatRoomActivity;

	SharedPreferences sharedPrefCustom;	// 공용 프립스	
	int isRunning = 0;		// 통신 도중 중복 호출을 방지하기 위함.

	String phoneNum;						// 사용자 아이디

	// 전달받은 정보
	String recievedUsedMarketChatIdUsedMarketChat = "";
	String recievedUsedMarketChatIdUsedMarketProduct = "";
	String recievedUsedMarketChatOwner = "";
	String recievedSubject = "";

	UsedMarketChatUser usedMarketChatUserMyInfo;
	
//	String recievedOthersNickName = "";

	// 채팅 리스트 최초 조회한 정보. (이미지 제외)
	List<UsedMarketChatMessage> entries1;
	ArrayList<UsedMarketChatMessage> entriesFn = new ArrayList<UsedMarketChatMessage>();				// 최종 꺼내어 화면에 보여줄 값


	// 캐럿때에는 가장 하단에 내려갈때 추가 조회했지만 채팅에서는 상단으로 올라갔을때 추가 조회를 해야 함.. 위치는 현위치를 유지해야 하고..
	int indexDataFirst = 0;			// 부분 검색 위한 인덱스. 시작점
	int indexDataLast = 0;			// 부분 검색 위한 인덱스. 끝점
	int indexDataTotal = 0;			// 부분 검색 위한 인덱스. 현재 서버에서 조회된 전체 개수. 사이즈이지만 추가 데이터를 위해 인덱스로 사용
	Boolean mIsFirst = false;			// 가장 처음까지 갔음. true 라면 더이상의 추가 없음. 새 조회시 false 로 초기화
	Boolean adding = false;			// 데이터 더하기 진행 중임.
	Boolean newSearch = false; 		// 새로운 조회인지 여부. 새로운 조회라면 기존 데이터는 지우고 새로 검색한 데이터만 사용. 새로운 조회가 아니라면 기존 데이터에 추가 데이터를 추가.

	// 임시 저장 데이터

	String tmp_prevImageUrl = "";				// 프로필 이미지 반복 로딩 막기 위한 저장용 URL
	Bitmap tmp_prevImage = null;				// 프로필 이미지 반복 로딩 막기 위한 저장용 이미지

	Bitmap tmp_uploadFileImg = null;			// 업로드 이미지
	Bitmap tmp_uploadFileThumbnailImg = null;	// 업로드 썸네일 이미지
	Bitmap tmp_profileImg = null;				// 프로필 이미지
	Bitmap tmp_profileThumbnailImg = null;		// 프로필 썸네일 이미지
	String tmp_myMessageYn = "";				// 내 글인지 여부

	Bitmap mySelectedImage = null;		// 채팅방에서 사용자가 선택 또는 촬영한 이미지



	// 리스트 아답터
	UsedMarketChatMessageAdapter usedMarketChatMessageAdapter;

	// 화면 구성 	
	TextView chatRoomTitle; 	// 상단 타이틀
	Button topNaviCloseBtn; 		// 상단 닫기 버튼
//	Button topNaviBlockBtn; 		// 상단 차단 버튼
	ListView listView;			// 채팅 내용 리스트 뷰					 
	View emptyView;				// 채팅 내용 없음 뷰
	EditText userChatTextField;		// 채팅 입력창
	Button image_send_btn;				// 사진 첨부 버튼
	Button sendBtn;				// 채팅 내용 전송 버튼
	ProgressBar pb1;			// 중단 로딩 진행바
	String userInputText = "";		// 사용자가 입력한 텍스트
	String titleText = "";
	//		ImageView upload_img_view;		// 업로드 이미지 크게보기 뷰

	// 키보드 자동 숨기기 위한 부모 레이아웃(리스너 달아서 키보드 숨김)과 입력 매니저
	View parentLayout;
	InputMethodManager imm;

	//////////////////////////////////////////////////////////////////////////////////////////////////////	

	// 핸들러
	Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg){
			try{
				Bundle b = msg.getData();		
				// 상단 타이틀 문구 변경
				if(b.getInt("titleChange")==1){
					chatRoomTitle.setText(titleText);
				}
				if(b.getInt("showYN")==1){
					listView.setVisibility(View.VISIBLE);
					// 최종 결과 배열은 entriesFn 에 저장되어 있다
					if(entriesFn!=null && entriesFn.size()>0){
						//							if(isFirstGetList){
						if(newSearch){
							setListing();
							newSearch = false;		// 다시 돌려놓는다. 이제는 최초 검색이 아님.
							// 마지막 위치로 ?
							listView.setSelection(listView.getAdapter().getCount()-1);
						}else{
							usedMarketChatMessageAdapter.notifyDataSetChanged();	// 위치 변경 없음. 유지.
						}
					}else{
						Log.d(TAG,"no data");
						listView.setEmptyView(emptyView);
					}
					adding = false;		// 조회 및 추가 끝났음. 다른거 조회시 또 추가 가능.. (스크롤 리스너를 다룰때 사용)
					isRunning = 0;
				}

				// 리스트 숨김
				if(b.getInt("showYN")==2){
					listView.setVisibility(View.INVISIBLE);
				}

				// 입력창 초기화
				if(b.getInt("initTextField")==1){
					userChatTextField.setText("");
				}

				//					// 업로드 이미지 상세 보기
				//					if(b.getInt("showUploadImage")==1){
				//						upload_img_view.setImageBitmap(temp_upload_img);
				//				  		upload_img_view.setVisibility(View.VISIBLE);
				//					}

				// 화면에 토스트
				if(b.getInt("showToast")==1){		// 화면에 토스트 띄우기. 띄우는 문구는 msg 로 받은 값
					Toast.makeText(UsedMarketChatRoomActivity.this, R.string.error_message, Toast.LENGTH_SHORT).show();
				}
				// 화면에 알림창
				if(b.getInt("showAlert")==1){					 // 경고창 . 
					new AlertDialog.Builder(returnThis())
					.setTitle(CommonConstant.alertTitle)							 
					.setMessage(b.getString("msg"))
					.setIcon(R.drawable.ic_launcher)		
					.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int whichButton) {
							//
						}})
						.setNegativeButton("", null).show();
				}
				if(b.getInt("order")==1){
					// 프로그래스바 실행
					pb1.setVisibility(View.VISIBLE);
				}else if(b.getInt("order")==2){
					// 프로그래스바  종료
					pb1.setVisibility(View.INVISIBLE);
				}

				switch (msg.what)
				{
				case REGISTER_MESSAGE : runOnUiThread(new RunnableRegisterMessage());				 
				break;
				case REGISTER_MESSAGE_WITH_IMAGE : runOnUiThread(new RunnableRegisterMessageWithImage());			 
				break;
				case SELECT_MESSAGE_LIST : runOnUiThread(new RunnableSelectMessageList());				 
				break;
				case SELECT_USER : runOnUiThread(new RunnableSelectUser());		 
				break;
//				case SELECT_CHAT_INFORMATION   : runOnUiThread(new RestSelectChatInformation());			
//				break;
				default : 
					break;
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	};

	///////////////////////////////////////////////////////////////////////////////////////////////////////////////	

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.d(TAG,"onCreate");
		requestWindowFeature(Window.FEATURE_NO_TITLE );	// 타이틀바 제거
		setContentView(R.layout.usedmarket_chat_room_activity);
		Log.w(TAG,"UsedMarketChatRoomActivity onCreate");

		// 레이아웃의 개체들을 가져와서 사용
		chatRoomTitle = (TextView) findViewById(R.id.chat_room_title);		// 상단 타이틀
		listView  = (ListView)findViewById(R.id.listview);		// 채팅 리스트 뷰
		emptyView = findViewById(R.id.empty2);								// 채팅 내역 없음 뷰
		userChatTextField =  (EditText) findViewById(R.id.chat_room_chat_text_field);	// 입력 창
		image_send_btn = (Button) findViewById(R.id.image_send_btn);									// 전송 버튼
		sendBtn = (Button) findViewById(R.id.send_btn);									// 전송 버튼
		pb1=(ProgressBar) findViewById(R.id.ProgressBar01);					// 프로그래스 바

		// 상단 닫기 버튼
//		topNaviCloseBtn = (Button) findViewById(R.id.top_navi_close_btn);
		topNaviCloseBtn = (Button) findViewById(R.id.backBtn);
		topNaviCloseBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Log.d(TAG,"backBtn clicked");
				finish();
			}
		});

		// 부모 레이아웃 리스너 - 외부 터치 시 키보드 숨김 용도
		parentLayout = findViewById(R.id.chat_room_parent_layout);			// 부모 레이아웃. 리스너 달아서 키보드 숨김에 사용
		imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
		parentLayout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Log.w(TAG,"parentLayout click");
				hideKeypad();
			}
		});
		// 리스트 영역을 터치해도 키패드 사라지도록.
		listView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View v,
					int position, long id) {
				hideKeypad();
			}
		});
		sendBtn.setOnClickListener(new OnClickListener() {			// 전송 버튼
			@Override
			public void onClick(View v) {
				Log.w(TAG,"sendBtn click");
				hideKeypad();
				userInputText = userChatTextField.getText()+"";
				if(mySelectedImage==null){
					if(userInputText.length()>0){
						handler.sendEmptyMessage(REGISTER_MESSAGE);
					}
				}else{
					handler.sendEmptyMessage(REGISTER_MESSAGE_WITH_IMAGE);
				}

			}
		});
		
		
		// 프립
		sharedPrefCustom = getSharedPreferences(CommonConstant.prefName,
				Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);

		// 전번 세팅 // 사용자 아이디를 꺼낸다.
		phoneNum = sharedPrefCustom.getString("phoneNum", "");
		
		usedMarketChatRoomActivity = UsedMarketChatRoomActivity.this;		// GCM 푸시 메시지를 통한 리프레시 가능하도록 자신을 전달

		Intent recievedIntent = getIntent();
		recievedUsedMarketChatIdUsedMarketChat = recievedIntent.getStringExtra("usedMarketChatIdUsedMarketChat");		// 채팅방 고유 번호
		recievedUsedMarketChatIdUsedMarketProduct = recievedIntent.getStringExtra("usedMarketChatIdUsedMarketProduct");		// 상품 아이디	
		recievedUsedMarketChatOwner = recievedIntent.getStringExtra("usedMarketChatOwner");			// 방장 아이디
		recievedSubject = recievedIntent.getStringExtra("subject");			// 방제목
		titleText = recievedSubject;
		
		Log.d(TAG,"recievedUsedMarketChatIdUsedMarketChat:"+recievedUsedMarketChatIdUsedMarketChat);
		Log.d(TAG,"recievedUsedMarketChatIdUsedMarketProduct:"+recievedUsedMarketChatIdUsedMarketProduct);
		Log.d(TAG,"recievedUsedMarketChatOwner:"+recievedUsedMarketChatOwner);
		Log.d(TAG,"recievedSubject:"+recievedSubject);
		
		usedMarketChatUserMyInfo = new UsedMarketChatUser();
		usedMarketChatUserMyInfo.setUsedMarketChatIdUsedMarketChat(recievedUsedMarketChatIdUsedMarketChat);
		usedMarketChatUserMyInfo.setUsedMarketChatIdUsedMarketProduct(recievedUsedMarketChatIdUsedMarketProduct);
		usedMarketChatUserMyInfo.setUsedMarketChatOwner(recievedUsedMarketChatOwner);
//		recievedOthersNickName = recievedIntent.getStringExtra("othersNickName");			// 
				
		titleChange();
		
		//  현재 채팅방 정보 저장
		SharedPreferences.Editor saveChatRoomStatusPref = sharedPrefCustom.edit();
		saveChatRoomStatusPref.putBoolean("chatRoomUsingYn", true);			   		// 채팅방 사용중. (푸시를 통한 리프레시 기능을 위해 필요)	
		saveChatRoomStatusPref.putString("currentUsedMarketChatIdUsedMarketChat", recievedUsedMarketChatIdUsedMarketChat);		//  위의 두 값이 바뀐후 리프레시한다면 채팅방이 바뀌는 효과.(타이틀도 바꿔야)
		saveChatRoomStatusPref.putString("currentUsedMarketChatIdUsedMarketProduct", recievedUsedMarketChatIdUsedMarketProduct);	//  그에 따른 변수도 함께 바껴야 (최초 조회 여부 관련) 	
		saveChatRoomStatusPref.putString("currentUsedMarketChatOwner", recievedUsedMarketChatOwner);	//  그에 따른 변수도 함께 바껴야 (최초 조회 여부 관련) 	
		saveChatRoomStatusPref.commit();
		
//		handler.sendEmptyMessage(SELECT_CHAT_INFORMATION);	// idUser 먼저 발급 받기 // -> 채팅방 정보 먼저. -> 채팅방 제목은 밖에서 받아옴
		handler.sendEmptyMessage(SELECT_USER);	// idUser 발급 받기
	}


	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 사진
	public void onClickUploadImg(View v) {
		switch(v.getId()) {
		case R.id.image_send_btn:
			hideKeypad();
			AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
			View customLayout = View.inflate(mContext, R.layout.chat_room_custom_get_img_menu_layout, null);
			builder.setView(customLayout);		
			dialog = builder.create();
			dialog.show();
			break;
		case R.id.get_img_from_camera:
			saveServerDataToPreference();
//			readServerDataFromPreference();
			dialog.dismiss();
			takePicture();
			break;
		case R.id.get_img_from_photo_album:
			saveServerDataToPreference();
//			readServerDataFromPreference();
			dialog.dismiss();
			photoAlbum();
			break;
		}
	}
	//사진 촬영
	void takePicture() {
		//카메라 호출 intent 생성
		Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		startActivityForResult(intent, REQUEST_PICTURE);
	}
	//사진 불러오기
	void photoAlbum() {
		//photo Album 호출 intent 생성
		Intent intent = new Intent(Intent.ACTION_PICK);
		intent.setType(Images.Media.CONTENT_TYPE);
		intent.setData(Images.Media.EXTERNAL_CONTENT_URI);
		startActivityForResult(intent, REQUEST_PHOTO_ALBUM);
	}
	//촬영한 사진을 수정하기 위해서
	Bitmap loadPicture() {
		File file = new File(Environment.getExternalStorageDirectory(), SAMPLEIMG);
		BitmapFactory.Options option = new BitmapFactory.Options();
		option.inSampleSize = 4;
		return BitmapFactory.decodeFile(file.getAbsolutePath(), option);
	}
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);

		// 실패시에는 그냥 반환
		if(resultCode != RESULT_OK)
			return;
		if(requestCode == REQUEST_PICTURE) {
			// intent 의 여분 데이터로 저장된 비트맵 이미지를 얻는다.
			mySelectedImage = (Bitmap)data.getExtras().get("data");
			//	  			Log.d(TAG,"REQUEST_PICTURE S/ "+mySelectedImage.getHeight());
			
			// go upload
			if(checkNull(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketChat()).length()<1){		// 모토로이를 위한 처리.
				if(readServerDataFromPreference()){
					handler.sendEmptyMessage(REGISTER_MESSAGE_WITH_IMAGE);
				}else{
					showResultDialog("카메라 업로드 기능을 지원하지 않는 디바이스 입니다.");
					//					버그 신고 . 
				}
			}else{
				handler.sendEmptyMessage(REGISTER_MESSAGE_WITH_IMAGE);
			}
		}
		if(requestCode == REQUEST_PHOTO_ALBUM) {
			// uri 에서 이미지 가져오기
			Uri curImgURI = data.getData();
			try {
				mySelectedImage = Images.Media.getBitmap(getContentResolver(), curImgURI );
				Log.d(TAG,"REQUEST_PHOTO_ALBUM S");
				// go upload
				handler.sendEmptyMessage(REGISTER_MESSAGE_WITH_IMAGE);
			} catch (Exception e) { e.printStackTrace(); }
		}
	}



	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 비동기 작업

	/**
	 * 러너블. 채팅방 사용자 고유 키값 받기
	 */
	class RunnableSelectUser implements Runnable {
		public void run(){
			new backgroundThreadSelectUser().execute();	
		}
	}
	/**
	 * backgroundThreadSelectUser
	 * 비동기 . 채팅방 사용자 고유 키값 받기 ~ 인지 테이블 체크 및 메시지 리스트 호출까지.
	 * @author blue
	 *
	 */
	public class backgroundThreadSelectUser extends AsyncTask<Void, Void, Void>{
		@Override protected void onPostExecute(Void result) {  
			hidePb();
		} 
		@Override protected void onPreExecute() {  
			showPb();
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundThreadSelectUser");
			

			newSearch = true;	// 처음 와서 조회하든, 채팅방 이동후 조회하든 무조건 실행되니까 데이터에 상관없이 이곳은 최초 조회라고 할 수 있음.

			// 파라미터 세팅
			UsedMarketChatUser usedMarketChatUser = new UsedMarketChatUser();
			usedMarketChatUser.setPhoneNumber(phoneNum);
			usedMarketChatUser.setUsedMarketChatIdUsedMarketChat(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketChat());			// recievedUsedMarketChatIdUsedMarketChat
			usedMarketChatUser.setUsedMarketChatIdUsedMarketProduct(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketProduct());	// recievedUsedMarketChatIdUsedMarketProduct
			usedMarketChatUser.setUsedMarketChatOwner(usedMarketChatUserMyInfo.getUsedMarketChatOwner());								// recievedUsedMarketChatOwner

			// 메소드 호출
			UsedMarketChatRest usedMarketChatRest = new UsedMarketChatRest();				// 통신용
			
			String resultStr = usedMarketChatRest.RestSelectUser(usedMarketChatUser);
			if(resultStr.equals("F")){
				
			}else{
				
				try {
					JSONObject jsonObject = new JSONObject(resultStr);	
					usedMarketChatUserMyInfo.setIdUsedMarketChatUser(checkNull(jsonObject.getString("idUsedMarketChatUser")));
				} catch (Exception e) {
					e.printStackTrace();
				}
				
				
				/*
				 *  인지 테이블에 등록 여부 확인하여 등록하기   	
				 */
				UsedMarketChatRecognition usedMarketChatRecognition = new UsedMarketChatRecognition();
				usedMarketChatRecognition.setPhoneNumber(phoneNum);
				usedMarketChatRecognition.setUsedMarketChatIdUsedMarketChat(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketChat());
				usedMarketChatRecognition.setUsedMarketChatIdUsedMarketProduct(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketProduct());
				usedMarketChatRecognition.setUsedMarketChatOwner(usedMarketChatUserMyInfo.getUsedMarketChatOwner());
				resultStr = usedMarketChatRest.RestSelectDuplicationRecognition(usedMarketChatRecognition);
				if(resultStr.equals("F")){		// 실패한 경우
					Log.d(TAG,"RestSelectDuplicationRecognition fail");
				}else{				
					/*
					 *  등록되지 않은 경우. 새로 등록.
					 *  이미 등록된 경우 별도 동작 없음.	 
					 */
					try {
						JSONObject jsonObject = new JSONObject(resultStr);		
						if(jsonObject.getString("totalCount").equals("0")){
							
							usedMarketChatRecognition = new UsedMarketChatRecognition();
							usedMarketChatRecognition.setPhoneNumber(phoneNum);
							usedMarketChatRecognition.setUsedMarketChatIdUsedMarketChat(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketChat());
							usedMarketChatRecognition.setUsedMarketChatIdUsedMarketProduct(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketProduct());
							usedMarketChatRecognition.setUsedMarketChatOwner(usedMarketChatUserMyInfo.getUsedMarketChatOwner());
							resultStr = usedMarketChatRest.RestRegisterRecognition(usedMarketChatRecognition);
							
							jsonObject = new JSONObject(resultStr);		
							if(jsonObject.getString("result").equals("SUCCESS")){
								Log.d(TAG,"register to Recognition Success");
							}else{
								Log.d(TAG,"register to Recognition Fail");
							}
						}
					}catch(Exception e){
						//						callResult = "F";
					}
				}
				handler.sendEmptyMessage(SELECT_MESSAGE_LIST);	// 채팅방 메시지 목록 불러오기. 채팅용 유저 키를 받고 난 경우에만. 채팅 가능
			}
			
			return null; 
		}
	}
	/**
	 * 러너블. 메시지 리스트 가져오기(+메시지 읽음 여부 업데이트)
	 */
	class RunnableSelectMessageList implements Runnable {
		public void run(){
			new backgroundThreadSelectMessageList().execute();	
		}
	}
	/**
	 * backgroundThreadSelectMessageList
	 * 비동기 . 메시지 리스트 가져오기
	 * @author blue
	 *
	 */
	public class backgroundThreadSelectMessageList extends AsyncTask<Void, Void, Void>{
		@Override protected void onPostExecute(Void result) {  
			hidePb();
		} 
		@Override protected void onPreExecute() {  
			showPb();
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundThreadSelectMessageList");
			
			// 메시지 목록 읽음 여부 업데이트
			UsedMarketChatRecognition usedMarketChatRecognition = new UsedMarketChatRecognition();
			usedMarketChatRecognition.setPhoneNumber(phoneNum);
			usedMarketChatRecognition.setUsedMarketChatIdUsedMarketChat(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketChat());
			usedMarketChatRecognition.setUsedMarketChatIdUsedMarketProduct(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketProduct());
			usedMarketChatRecognition.setUsedMarketChatOwner(usedMarketChatUserMyInfo.getUsedMarketChatOwner());
			
			UsedMarketChatRest usedMarketChatRest = new UsedMarketChatRest();
			String resultStr = usedMarketChatRest.RestUpdateReadYn(usedMarketChatRecognition);

			// 목록 가져와서 뿌림
			if(resultStr.equals("F")){
				// err
			}else{
				try {
					JSONObject jsonObject = new JSONObject(resultStr);		// result		SUCCESS
					if(jsonObject.getString("result").equals("SUCCESS")){
						Log.d(TAG,"get message list");
						// 메시지 목록을 가져온다.
						UsedMarketChatMessage usedMarketChatMessage = new UsedMarketChatMessage();
						
						usedMarketChatMessage.setUsedMarketChatIdUsedMarketChat(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketChat());
						usedMarketChatMessage.setUsedMarketChatIdUsedMarketProduct(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketProduct());
						usedMarketChatMessage.setUsedMarketChatOwner(usedMarketChatUserMyInfo.getUsedMarketChatOwner());
						
						resultStr = usedMarketChatRest.RestSelectMessageList(usedMarketChatMessage);
						if(resultStr.equals("F")){
							showInfo();
						}else{
							newSearch = true;
							proccessTheChatData(resultStr);		// 데이터 가져와서 처리
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			return null; 
		}
	}


	/**
	 * 러너블. 메시지 작성.
	 */
	class RunnableRegisterMessage implements Runnable {
		public void run(){
			new backgroundThreadRegisterMessage().execute();	
		}
	}
	/**
	 * backgroundThreadRegisterMessage
	 * 비동기 . 메시지 작성.
	 * @author blue
	 *
	 */
	public class backgroundThreadRegisterMessage extends AsyncTask<Void, Void, Void>{
		@Override protected void onPostExecute(Void result) {  
			hidePb();
		} 
		@Override protected void onPreExecute() {  
			showPb();
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundThreadRegisterMessage");
			
			UsedMarketChatMessage usedMarketChatMessage = new UsedMarketChatMessage();
			UsedMarketChatRest usedMarketChatRest = new UsedMarketChatRest();
			// 파리미터 세팅
			usedMarketChatMessage.setContent(userInputText);
			usedMarketChatMessage.setMessageImage("");
			usedMarketChatMessage.setThumbnailLarge("");
			usedMarketChatMessage.setThumbnailSmall("");
			usedMarketChatMessage.setUsedMarketChatUserIdUsedMarketChatUser(usedMarketChatUserMyInfo.getIdUsedMarketChatUser());
			usedMarketChatMessage.setUsedMarketChatUserPhoneNumber(phoneNum);
			usedMarketChatMessage.setUsedMarketChatIdUsedMarketChat(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketChat());
			usedMarketChatMessage.setUsedMarketChatIdUsedMarketProduct(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketProduct());
			usedMarketChatMessage.setUsedMarketChatOwner(usedMarketChatUserMyInfo.getUsedMarketChatOwner());
			// 호출
			String resultStr = usedMarketChatRest.RestRegisterMessage(usedMarketChatMessage);
			// 결과 처리
			if(resultStr.equals("F")){
				// 전송 실패
				showResultDialog("메세지 전송이 실패하였습니다.");			 
			}else{	
				try {
					JSONObject jsonObject = new JSONObject(resultStr);		// result
					if(jsonObject.getString("result").equals("SUCCESS")){
						// 성공 -> 채팅창 초기화.
						initTextField();
					}else{
						showResultDialog("메세지 전송이 실패하였습니다.");	 
					}
					//						callResult = jsonObject.getString("result");
				} catch (Exception e) {
					//					callResult = "F";
					showResultDialog("메세지 전송이 실패하였습니다.");			 
				}
			}
			
			return null; 
		}
	}
	/**
	 * 러너블. 사진첨부 메시지 작성.		
	 */
	class RunnableRegisterMessageWithImage implements Runnable {
		public void run(){
			new backgroundThreadRegisterMessageWithImage().execute();	
		}
	}
	/**
	 * backgroundThreadRegisterMessageWithImage
	 * 비동기 . 사진 첨부 메시지 작성.
	 * @author blue
	 *
	 */
	public class backgroundThreadRegisterMessageWithImage extends AsyncTask<Void, Void, Void>{
		@Override protected void onPostExecute(Void result) { 
			hidePb();
		} 
		@Override protected void onPreExecute() {  
			showPb();
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundThreadRegisterMessageWithImage");

			// pref 에 저장해둔 정보를 로드한다. (데이터 손실 방지)
			readServerDataFromPreference();
			
			UsedMarketChatMessage usedMarketChatMessage = new UsedMarketChatMessage();
			UsedMarketChatRest usedMarketChatRest = new UsedMarketChatRest();
			// 파리미터 세팅
			usedMarketChatMessage.setContent("사진");
			usedMarketChatMessage.setMessageImage("");
			usedMarketChatMessage.setThumbnailLarge("");
			usedMarketChatMessage.setThumbnailSmall("");
			usedMarketChatMessage.setUsedMarketChatUserIdUsedMarketChatUser(usedMarketChatUserMyInfo.getIdUsedMarketChatUser());
			usedMarketChatMessage.setUsedMarketChatUserPhoneNumber(phoneNum);
			usedMarketChatMessage.setUsedMarketChatIdUsedMarketChat(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketChat());
			usedMarketChatMessage.setUsedMarketChatIdUsedMarketProduct(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketProduct());
			usedMarketChatMessage.setUsedMarketChatOwner(usedMarketChatUserMyInfo.getUsedMarketChatOwner());
			
			// 이미지 리사이즈
			Log.d(TAG,"img size:"+mySelectedImage.getWidth()+"x"+mySelectedImage.getHeight());
			mySelectedImage = commonUtil.resizeBitmapImage(mySelectedImage, MAX_WIDTH, MAX_HEIGHT);	 		// resize
			Log.d(TAG,"img size2:"+mySelectedImage.getWidth()+"x"+mySelectedImage.getHeight());
			usedMarketChatMessage.setUploadFileImg(mySelectedImage);
			
			// 호출
			String resultStr = usedMarketChatRest.RestRegisterMessageWithImage(usedMarketChatMessage, returnThis());
			// 결과 처리
			if(resultStr.equals("F")){
				// 전송 실패
				showResultDialog("메세지 전송이 실패하였습니다.");			 
			}else{	
				try {
					JSONObject jsonObject = new JSONObject(resultStr);		// result
					if(jsonObject.getString("result").equals("SUCCESS")){
						// 성공 -> 채팅창 초기화.
						initTextField();
						// 이미지 초기화
						mySelectedImage = null;
					}else{
						showResultDialog("메세지 전송이 실패하였습니다.");	 
					}
				} catch (Exception e) {
					showResultDialog("메세지 전송이 실패하였습니다.");			 
				}
			}
//			mySelectedImage = null;

			return null; 
		}
	}
	
	

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 리스팅	

	/**
	 * setListing
	 *  리스트 보여준다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void setListing(){
		usedMarketChatMessageAdapter = new UsedMarketChatMessageAdapter(this, entriesFn);
		listView.setAdapter(usedMarketChatMessageAdapter);

		/* 메시지 리스트는 클릭해도 별도 동작 없음. */
		//			listView.setOnScrollListener(listScrollListener);		// 리스너 등록. 스크롤시 하단에 도착하면 추가 데이터 조회하도록.
	}	


	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	// 유틸	

	/**
	 *  화면에 있는 채팅 리스트를 갱신한다. 
	 *   푸시를 통해 지시를 받았을때 외부에서 호출하기 위해 만든 메소드이다.
	 */
	public void callRefresh(){
		if(isRunning<1){
			isRunning = 1;
			handler.sendEmptyMessage(SELECT_MESSAGE_LIST);
		}else{
			Log.w(TAG, "already running..");
		}
	}


	///////////////////////////////////////////////////////	


	/**
	 * 	채팅 데이터를 처리한다. 
	 *    - string 으로 되어 있는 데이터를 변환하여 리스트에 담아 화면에 출력까지처리한다.
	 */
	public void proccessTheChatData(String resultStr){
		
		Date tempDate = new Date();
		// ### 
		// 화면에 통째로 보여줄지, 추가된 내용을 추가해서 업데이트할지는 결과 리스트의 변화에 따라 결정되므로 결과만 받아오지 않고, 중간 결과를 받아와서 이곳에서 처리함.
		JSONArray jsonArray2 = null;		
		try {
			jsonArray2 = new JSONArray(resultStr);
		} catch (JSONException e1) {
			e1.printStackTrace();
		}
		int max = jsonArray2.length();
		
		String tmp_idUsedMarketChatMessage = "";						// 채팅 메시지 고유 번호?				// 일단 보류
		String tmp_content = "";										// 채팅 글 내용							
		String tmp_messageImage = "";									// 업로드 이미지 URL ?					// 일단 보류
		String tmp_thumbnailLarge = "";									// 업로드 이미지 썸네일 URL ?			// 일단 보류
		String tmp_thumbnailSmall = "";									// 업로드 이미지 썸네일 URL ?			// 일단 보류	
		String tmp_registerDate = "";									// 채팅 메시지 작성 시각
		String tmp_usedMarketChatUserIdUsedMarketChatUser = "";			// 채팅 글 작성자 아이디
		String tmp_imagePath = "";										// 업로드 이미지 URL ? 					// 일단 보류
		String tmp_largeThumbnailPath = "";								// 업로드 이미지 URL ?					// 일단 보류
		String tmp_smallThumbnailPath = "";								// 업로드 이미지 URL ?					// 일단 보류
		
		if(newSearch){	// 최초 조회인 경우
			Log.d(TAG,"newSearch");
			//  최초 조회일때 		// 이미지를 제외하고 저장한다. 
			try {
				entries1 = new ArrayList<UsedMarketChatMessage>(max);
				entriesFn = new ArrayList<UsedMarketChatMessage>(max);
				if(max>0){
					for ( int i = 0; i < max; i++ ){
						JSONObject jsonObj = jsonArray2.getJSONObject(i);
							
						// 글번
						tmp_idUsedMarketChatMessage = checkNull(jsonObj.getString("idUsedMarketChatMessage"));
						
						// 내용
						tmp_content = checkNull(jsonObj.getString("content"));
						
						// 메시지 이미지
						tmp_messageImage = checkNull(jsonObj.getString("messageImage"));
						tmp_thumbnailLarge = checkNull(jsonObj.getString("thumbnailLarge"));
						tmp_thumbnailSmall = checkNull(jsonObj.getString("thumbnailSmall"));
						tmp_uploadFileImg = null;
						// 사용자 이미지?
						tmp_imagePath = checkNull(jsonObj.getString("imagePath"));
						tmp_largeThumbnailPath = checkNull(jsonObj.getString("largeThumbnailPath"));
						tmp_smallThumbnailPath = checkNull(jsonObj.getString("smallThumbnailPath"));
						
						if(tmp_messageImage.length()>0){
							Log.d(TAG,"tmp_messageImage:"+tmp_messageImage);
						}
						if(tmp_thumbnailLarge.length()>0){
							Log.d(TAG,"tmp_thumbnailLarge:"+tmp_thumbnailLarge);
						}
						if(tmp_thumbnailSmall.length()>0){
							Log.d(TAG,"tmp_thumbnailSmall:"+tmp_thumbnailSmall);
						}
						if(tmp_imagePath.length()>0){
							Log.d(TAG,"tmp_imagePath:"+tmp_imagePath);
						}
						if(tmp_largeThumbnailPath.length()>0){
							Log.d(TAG,"tmp_largeThumbnailPath:"+tmp_largeThumbnailPath);
						}
						if(tmp_smallThumbnailPath.length()>0){
							Log.d(TAG,"tmp_smallThumbnailPath:"+tmp_smallThumbnailPath);
						}
						
						// 등록일. 형변환 작업 포함.
						try{
							tmp_registerDate = checkNull(jsonObj.getString("registerDate"));
							tempDate = commonUtil.sf.parse(tmp_registerDate);
							tmp_registerDate = commonUtil.sfGeneralChat.format(tempDate);
						}catch(Exception e){
							tmp_registerDate = "";
						}
						
						// 글 작성자
						tmp_usedMarketChatUserIdUsedMarketChatUser = checkNull(jsonObj.getString("usedMarketChatUserIdUsedMarketChatUser"));
						//							if(tmp_pushChatUserMemberId.equals(pushChatMember.getMemberId())){	// 나와 같다면
						if(tmp_usedMarketChatUserIdUsedMarketChatUser.equals(usedMarketChatUserMyInfo.getIdUsedMarketChatUser())){	// 나와 같다면
							tmp_myMessageYn = "Y";
						}else{
							tmp_myMessageYn = "N";
						}
						
						entries1.add(new UsedMarketChatMessage(
								tmp_idUsedMarketChatMessage,
								tmp_content,
								tmp_messageImage,
								tmp_thumbnailLarge,
								tmp_thumbnailSmall,
								tmp_registerDate,
								tmp_usedMarketChatUserIdUsedMarketChatUser,
								tmp_imagePath,
								tmp_largeThumbnailPath,
								tmp_smallThumbnailPath,
								
								tmp_myMessageYn,
								tmp_uploadFileImg
						));
					}
				}
			}catch (JSONException e) {
				e.printStackTrace();
			}

			indexDataTotal = max;	// 전체 개수를 업데이트 한다.	//entries1.size()
			// 가장 끝에서 시작할거니까 마지막 값을 저장해둔다 (전체 개수). 인덱스로 사용시 -1할것.
			indexDataFirst = indexDataTotal;
			indexDataLast = indexDataTotal;

			proccessTheChatImageData();
		}else{			// 최초 조회가 아닐때
			Log.d(TAG,"not newSearch");
			if(indexDataTotal==max){
				// 변화 없는 경우. 
			}else{
				// 변화된 것만 업데이트  . 추가데이터는 이미지를 포함함. 이후 바로 보여준다.
				try{
					for ( int i = indexDataTotal; i < max; i++ ){	// 사이즈이지만 추가 데이터를 위해 인덱스로 사용. max 는 사이즈
						JSONObject jsonObj = jsonArray2.getJSONObject(i);
//						try{
//							tmp_fileUrl = jsonObj.getString("fileUrl");
//							tmp_uploadFileImg = null;	// 썸네일만 가져오도록 수정
//							//								if(tmp_fileUrl==null||tmp_fileUrl.length()<1||tmp_fileUrl.equals("null")){
//							//									tmp_uploadFileImg = null;
//							//								}else{
//							//									tmp_uploadFileImg = LoadImage(tmp_fileUrl);
//							//								}
//						}catch(Exception e){
//							tmp_fileUrl = "";
//							tmp_uploadFileImg = null;
//						}
//						try{
//							tmp_thumbnailUrl = jsonObj.getString("thumbnailUrl");
//							if(tmp_thumbnailUrl==null||tmp_thumbnailUrl.length()<1||tmp_thumbnailUrl.equals("null")){
//								tmp_uploadFileThumbnailImg = null;
//							}else{
//								tmp_uploadFileThumbnailImg = LoadImage(tmp_thumbnailUrl, false);
//							}
//						}catch(Exception e){
//							tmp_thumbnailUrl = "";
//							tmp_uploadFileThumbnailImg = null;
//						}
//						try{
//							tmp_profileImageUrl = jsonObj.getString("profileImageUrl");
//							tmp_profileImg = null;
//						}catch(Exception e){
//							tmp_profileImageUrl = "";
//						}
//						try{
//							tmp_profileThumbnailUrl = jsonObj.getString("profileThumbnailUrl");
//							if(tmp_profileThumbnailUrl==null||tmp_profileThumbnailUrl.length()<1||tmp_profileThumbnailUrl.equals("null")){
//								tmp_profileThumbnailImg = null;
//							}else{
//								if(!(tmp_pushChatUserMemberId.equals(userId))){	// 상대방의 것만.
//									//								if(!(tmp_pushChatUserMemberId.equals(pushChatMember.getMemberId()))){	// 상대방의 것만.
//									if(tmp_prevImageUrl.equals(tmp_profileThumbnailUrl)){	// 기존 것과 같으면 그대로 사용
//										tmp_profileThumbnailImg = tmp_prevImage;
//									}else{
//										tmp_prevImageUrl = tmp_profileThumbnailUrl;		// 기존것과 다르다면 새로 조회
//										tmp_prevImage = LoadImage(tmp_prevImageUrl, true);
//										tmp_profileThumbnailImg = tmp_prevImage;
//									}
//								}
//							}
//						}catch(Exception e){
//							tmp_profileThumbnailImg = null;
//							tmp_profileThumbnailUrl = "";
//						}
						
						// 글 작성자
						tmp_usedMarketChatUserIdUsedMarketChatUser = checkNull(jsonObj.getString("usedMarketChatUserIdUsedMarketChatUser"));
						//							if(tmp_pushChatUserMemberId.equals(pushChatMember.getMemberId())){	// 나와 같다면
						if(tmp_usedMarketChatUserIdUsedMarketChatUser.equals(usedMarketChatUserMyInfo.getIdUsedMarketChatUser())){	// 나와 같다면
							tmp_myMessageYn = "Y";
						}else{
							tmp_myMessageYn = "N";
						}
						
						// 내용
						tmp_content = checkNull(jsonObj.getString("content"));
						
						// 등록일. 형변환 작업 포함.
						try{
							tmp_registerDate = checkNull(jsonObj.getString("registerDate"));
							tempDate = commonUtil.sf.parse(tmp_registerDate);
							tmp_registerDate = commonUtil.sfGeneralChat.format(tempDate);
						}catch(Exception e){
							tmp_registerDate = "";
						}
						
						// 메시지 이미지	
						tmp_messageImage = checkNull(jsonObj.getString("messageImage"));
						tmp_uploadFileImg = null;
							
						tmp_imagePath = checkNull(jsonObj.getString("imagePath"));
							
						// 최초 조회 데이터는 마지막에 붙인다.
						entries1.add(new UsedMarketChatMessage(
								tmp_idUsedMarketChatMessage,
								tmp_content,
								tmp_messageImage,
								tmp_thumbnailLarge,
								tmp_thumbnailSmall,
								tmp_registerDate,
								tmp_usedMarketChatUserIdUsedMarketChatUser,
								tmp_imagePath,
								tmp_largeThumbnailPath,
								tmp_smallThumbnailPath,
								
								tmp_myMessageYn,
								tmp_uploadFileImg
						));
						// 최종 결과 리스트의 가장 첫번째에 넣는다.(최종 결과 리스트는 역순 데이터) 첫번째 데이터가 가장 하단에 붙게 된다.?? 똑같은데
						entriesFn.add(new UsedMarketChatMessage(
								tmp_idUsedMarketChatMessage,
								tmp_content,
								tmp_messageImage,
								tmp_thumbnailLarge,
								tmp_thumbnailSmall,
								tmp_registerDate,
								tmp_usedMarketChatUserIdUsedMarketChatUser,
								tmp_imagePath,
								tmp_largeThumbnailPath,
								tmp_smallThumbnailPath,
								
								tmp_myMessageYn,
								tmp_uploadFileImg
						));
//						// 최초 조회 데이터는 마지막에 붙인다.
//						entries1.add(new PushChatMessage(
//								tmp_pushChatUserMemberId,
//								tmp_content,
//								tmp_registerDate,
//								tmp_nickName,
//								tmp_profileImageUrl,
//								tmp_profileThumbnailUrl,
//								tmp_profileImg,
//								tmp_profileThumbnailImg,
//								tmp_myMessageYn,
//								tmp_thumbnailUrl,
//								tmp_uploadFileThumbnailImg,
//								tmp_fileUrl,
//								tmp_uploadFileImg
//						));
//						// 최종 결과 리스트의 가장 첫번째에 넣는다.(최종 결과 리스트는 역순 데이터) 첫번째 데이터가 가장 하단에 붙게 된다.?? 똑같은데
//						//							entriesFn.add(0,new PushChatMessage(
//						entriesFn.add(new PushChatMessage(
//								tmp_pushChatUserMemberId,
//								tmp_content,
//								tmp_registerDate,
//								tmp_nickName,
//								tmp_profileImageUrl,
//								tmp_profileThumbnailUrl,
//								tmp_profileImg,
//								tmp_profileThumbnailImg,
//								tmp_myMessageYn,
//								tmp_thumbnailUrl,
//								tmp_uploadFileThumbnailImg,
//								tmp_fileUrl,
//								tmp_uploadFileImg
//						));
					}						
					indexDataTotal = max;		// 총 개수를 업데이트한다.	// =  entries1.size()
					// 기존 인덱스들은 동일한 대상을 가르키므로 바꿔주지 않는다. (최초 조회 데이터의 마지막에 추가됐기 때문. 뒤쪽은 신경 안씀. 앞쪽만 추가조회하니까.)						
				}catch(Exception e){
					e.printStackTrace();
				}

				// 추가 데이터는 바로 보여준다.
				hidePb();
				showInfo();
			}
		}
		isRunning = 0;
	}



	/**
	 * 	채팅 이미지 데이터를 처리한다.. 최초 조회용. 
	 */
	public void proccessTheChatImageData(){
		
		// ### 
		entriesFn.clear();		// ? 최초 조회니까 비우고 시작. 
		for(int i=0; i<indexDataTotal; i++){
			UsedMarketChatMessage usedMarketChatMessage = (UsedMarketChatMessage)entries1.get(i);
			// 이미지를 불러와서 저장시킨다.
			usedMarketChatMessage = setImageToMessage(usedMarketChatMessage);
			entriesFn.add(usedMarketChatMessage);
		}
		//			// 최초 조회한 경우
		//			if(indexDataFirst == indexDataTotal){
		//				// 20개 이하이면 모두 사용하고, 20개 이상일때는 20개만 잘라서 사용
		//				if(indexDataTotal >= COUNT_OF_SHOW_CHAT_MESSAGE_AT_ONE_TIME){	// 전체 개수가 더 많음	
		//					// 데이터 개수 20개 이상인 경우. 가장 마지막 20개만 사용
		//					Log.d(TAG,"total:"+indexDataTotal+"//"+(indexDataTotal-1)+"~"+(indexDataTotal-COUNT_OF_SHOW_CHAT_MESSAGE_AT_ONE_TIME));
		//					for(int i=indexDataTotal-1; i>(indexDataTotal-COUNT_OF_SHOW_CHAT_MESSAGE_AT_ONE_TIME); i--){	// 끝에서 부터. 20개만
		//						Log.d(TAG,"i:"+i);
		//						PushChatMessage tempPushChatMessage = (PushChatMessage)entries1.get(i);
		//						// 이미지를 불러와서 저장시킨다.
		//						tempPushChatMessage = setImageToMessage(tempPushChatMessage);
		//						entriesFn.add(tempPushChatMessage);
		//					}
		//					indexDataLast = indexDataTotal -1;		// 가장 끝에서부터 (=인덱스)
		//					indexDataFirst = indexDataTotal - COUNT_OF_SHOW_CHAT_MESSAGE_AT_ONE_TIME;	// n개 전까지 조회함 (=인덱스)
		//				}else{				
		//					// 데이터 개수 20개 미만인 경우. 최대 개수 모두 사용. 0까지 내려옴
		//					for(int i=indexDataTotal -1; i<0; i--){
		//						Log.d(TAG,"i:"+i);
		//						PushChatMessage tempPushChatMessage = (PushChatMessage)entries1.get(i);
		//						// 이미지를 불러와서 저장시킨다.
		//						tempPushChatMessage = setImageToMessage(tempPushChatMessage);
		//						entriesFn.add(tempPushChatMessage);
		//					}
		//					indexDataLast = indexDataTotal -1;
		//					indexDataFirst = 0;
		//				}
		//				
		//				if(indexDataFirst==0){
		//					mIsFirst = true;		// 가장 처음까지 갔음
		//				}
		//				
		//			}else if(indexDataFirst!=0 && indexDataLast!= indexDataTotal-1){	//   이미 앞부분을 나눠서 뒷부분을 붙여야 하는 경우. 모두조회한경우아님. + (데이터를 잘라 붙이고 나면 indexDataLast 가 전체데이터의 마지막 데이터가 될수 없음)
		//				// 20개 추가가 불가능 (최대 개수에 도달)시 최대 개수까지 진행한다.
		//				if(indexDataFirst < COUNT_OF_SHOW_CHAT_MESSAGE_AT_ONE_TIME){	
		//					for(int i=indexDataLast; i<0; i--){
		//						Log.d(TAG,"i:"+i);
		//						PushChatMessage tempPushChatMessage = (PushChatMessage)entries1.get(i);
		//						// 이미지를 불러와서 저장시킨다.
		//						tempPushChatMessage = setImageToMessage(tempPushChatMessage);
		//						entriesFn.add(tempPushChatMessage);
		//					}
		//					indexDataFirst = 0;
		//					indexDataLast = 0;		// 따로 계산이 되지 않네. n 보다 작은 값임.
		//				}else{	
		//					// 20개 추가 가능하면 20개까지 추가해준다.  // 마지막 번호 + 20개보다 클때는 20개추가 가능
		//					for(int i=indexDataLast; i<indexDataLast-COUNT_OF_SHOW_CHAT_MESSAGE_AT_ONE_TIME; i--){
		//						Log.d(TAG,"i:"+i);
		//						PushChatMessage tempPushChatMessage = (PushChatMessage)entries1.get(i);
		//						// 이미지를 불러와서 저장시킨다.
		//						tempPushChatMessage = setImageToMessage(tempPushChatMessage);
		//						entriesFn.add(tempPushChatMessage);
		//					}
		//					indexDataLast = indexDataLast - COUNT_OF_SHOW_CHAT_MESSAGE_AT_ONE_TIME;
		//					indexDataFirst = indexDataFirst - COUNT_OF_SHOW_CHAT_MESSAGE_AT_ONE_TIME;
		//				}
		//				if(indexDataFirst==0){
		//					mIsFirst = true;		// 가장 처음까지 갔음
		//				}
		//			}else{
		//				// 최대 개수까지 다 됐음.
		//			}


		// 화면에 최초 모드로 입력해준다.		// 화면에 추가된 데이터를 업데이트해준다.
		showInfo();
		hidePb();	


		// 0번째에 add 하면 전체 뒤로 밀려날지도 모름. 그럼 처음에 넣는것도 가능해짐.


		////			pushChatMember = usedMarketRest.getChatMember();		// idUser 값을 얻기 위함.
		////			idUser = pushChatMember.getMemberId();		
		//			
		//			// 화면에 통째로 보여줄지, 추가된 내용을 추가해서 업데이트할지는 결과 리스트의 변화에 따라 결정되므로 결과만 받아오지 않고, 중간 결과를 받아와서 이곳에서 처리함.
		//			String tempstr = usedMarketRest.getTempstr();
		//			JSONArray jsonArray2 = null;		
		//			try {
		//				jsonArray2 = new JSONArray(tempstr);
		//			} catch (JSONException e1) {
		//				e1.printStackTrace();
		//			}
		//			int max = jsonArray2.length();
		//			if(savedEntriesFnSize!=0){		// 이전에 저장된 메시지 개수가 0개가 아닐때(최초 조회가 아닐때)
		//				isFirstGetList = false;
		//				if(savedEntriesFnSize==max){
		//					// 변화 없는 경우. 
		//				}else{
		//					// 변화된 것만 업데이트  
		//					try{
		//						for ( int i = savedEntriesFnSize; i < max; i++ ){
		//							JSONObject jsonObj = jsonArray2.getJSONObject(i);
		//							
		//							try{
		//								tmp_pushChatUserMemberId = jsonObj.getString("pushChatUserMemberId");
		//								if(tmp_pushChatUserMemberId.equals(pushChatMember.getMemberId())){	// 나와 같다면
		//									tmp_myMessageYn = "Y";
		//								}else{
		//									tmp_myMessageYn = "N";
		//								}
		//							}catch(Exception e){
		//								tmp_pushChatUserMemberId = "";
		//							}
		//							try{
		//								tmp_content = jsonObj.getString("content");
		//							}catch(Exception e){
		//								tmp_content = "";
		//							}
		//							try{
		//								tmp_registerDate = jsonObj.getString("registerDate");
		//							}catch(Exception e){
		//								tmp_registerDate = "";
		//							}
		//							try{
		//								tmp_nickName = jsonObj.getString("nickName");
		//							}catch(Exception e){
		//								tmp_nickName = "";
		//							}
		//							try{
		//								tmp_fileUrl = jsonObj.getString("fileUrl");
		//								if(tmp_fileUrl==null||tmp_fileUrl.length()<1||tmp_fileUrl.equals("null")){
		//									tmp_uploadFileImg = null;
		//								}else{
		////									Log.d(TAG,"fileUrl in continue::"+tmp_fileUrl);
		//									tmp_uploadFileImg = LoadImage(tmp_fileUrl);
		////									tmp_uploadFileImg = null;
		//								}
		//							}catch(Exception e){
		//								Log.d(TAG,"LoadImage(tmp_fileUrl) error in continue");
		//								tmp_fileUrl = "";
		//								tmp_uploadFileImg = null;
		//							}
		//							try{
		//								tmp_thumbnailUrl = jsonObj.getString("thumbnailUrl");
		//								if(tmp_thumbnailUrl==null||tmp_thumbnailUrl.length()<1||tmp_thumbnailUrl.equals("null")){
		//									tmp_uploadFileThumbnailImg = null;
		//								}else{
		////									Log.d(TAG,"thumbnailUrl::"+tmp_thumbnailUrl);
		//									tmp_uploadFileThumbnailImg = LoadImage(tmp_thumbnailUrl);
		////									tmp_uploadFileThumbnailImg = null;
		//								}
		//							}catch(Exception e){
		//								tmp_thumbnailUrl = "";
		//								tmp_uploadFileThumbnailImg = null;
		//							}
		//							try{
		//								tmp_profileImageUrl = jsonObj.getString("profileImageUrl");
		//								if(tmp_profileImageUrl==null||tmp_profileImageUrl.length()<1||tmp_profileImageUrl.equals("null")){
		//									tmp_profileImg = null;
		//								}else{
		////									Log.d(TAG,"tmp_profileImageUrl::"+tmp_profileImageUrl);
		////									tmp_profileImg = LoadImage(tmp_profileImageUrl);
		//									tmp_profileImg = null;
		//								}
		//							}catch(Exception e){
		//								tmp_profileImageUrl = "";
		//								tmp_profileImg = null;
		//							}
		//							try{
		//								tmp_profileThumbnailUrl = jsonObj.getString("profileThumbnailUrl");
		//								if(tmp_profileThumbnailUrl==null||tmp_profileThumbnailUrl.length()<1||tmp_profileThumbnailUrl.equals("null")){
		//									tmp_profileThumbnailImg = null;
		//								}else{
		//									if(!(tmp_pushChatUserMemberId.equals(pushChatMember.getMemberId()))){	// 상대방의 것만.
		//										if(tmp_prevImageUrl.equals(tmp_profileThumbnailUrl)){	// 기존 것과 같으면 그대로 사용
		//											tmp_profileThumbnailImg = tmp_prevImage;
		//										}else{
		////											Log.d(TAG,"tmp_profileThumbnailUrl::"+tmp_profileThumbnailUrl);
		//											tmp_prevImageUrl = tmp_profileThumbnailUrl;		// 기존것과 다르다면 새로 조회
		//											tmp_prevImage = LoadImage(tmp_prevImageUrl);
		//											tmp_profileThumbnailImg = tmp_prevImage;
		//										}
		//									}
		//								}
		//							}catch(Exception e){
		//								tmp_profileThumbnailUrl = "";
		//								tmp_profileThumbnailImg = null;
		//							}
		//							entriesFn.add(new PushChatMessage(
		//									tmp_pushChatUserMemberId,
		//									tmp_content,
		//									tmp_registerDate,
		//									tmp_nickName,
		//									tmp_profileImageUrl,
		//									tmp_profileThumbnailUrl,
		//									tmp_profileImg,
		//									tmp_profileThumbnailImg,
		//									tmp_myMessageYn,
		//									tmp_thumbnailUrl,
		//									tmp_uploadFileThumbnailImg,
		//									tmp_fileUrl,
		//									tmp_uploadFileImg
		//							));
		//						}
		//							
		//					}catch(Exception e){
		//						e.printStackTrace();
		//					}
		//					savedEntriesFnSize = entriesFn.size();	// 전체 개수를 업데이트 한다.
		//				}
		//			}else{	//  최초 조회일때 
		//				isFirstGetList = true;
		//				try {
		//					entries1 = new ArrayList<PushChatMessage>(max);
		//					if(max>0){
		//						for ( int i = 0; i < max; i++ ){
		//							JSONObject jsonObj = jsonArray2.getJSONObject(i);
		//							
		//							try{
		//								tmp_pushChatUserMemberId = jsonObj.getString("pushChatUserMemberId");
		//								if(tmp_pushChatUserMemberId.equals(pushChatMember.getMemberId())){	// 나와 같다면
		//									tmp_myMessageYn = "Y";
		//								}else{
		//									tmp_myMessageYn = "N";
		//								}
		//							}catch(Exception e){
		//								tmp_pushChatUserMemberId = "";
		//							}
		//							try{
		//								tmp_content = jsonObj.getString("content");
		//							}catch(Exception e){
		//								tmp_content = "";
		//							}
		//							try{
		//								tmp_registerDate = jsonObj.getString("registerDate");
		//							}catch(Exception e){
		//								tmp_registerDate = "";
		//							}
		//							try{
		//								tmp_nickName = jsonObj.getString("nickName");
		//							}catch(Exception e){
		//								tmp_nickName = "";
		//							}
		//							try{
		//								tmp_fileUrl = jsonObj.getString("fileUrl");
		//								if(tmp_fileUrl==null||tmp_fileUrl.length()<1||tmp_fileUrl.equals("null")){
		//									tmp_uploadFileImg = null;
		//								}else{
		////									Log.d(TAG,"fileUrl in first::"+tmp_fileUrl+"("+i+")");
		//									try{
		//										tmp_uploadFileImg = LoadImage(tmp_fileUrl);
		//									}catch(Exception e){
		//										e.printStackTrace();
		//									}
		//								}
		//							}catch(Exception e){
		//								e.printStackTrace();
		//								tmp_fileUrl = "";		
		//								tmp_uploadFileImg = null;
		//							}
		//							try{
		//								tmp_thumbnailUrl = jsonObj.getString("thumbnailUrl");
		//								if(tmp_thumbnailUrl==null||tmp_thumbnailUrl.length()<1||tmp_thumbnailUrl.equals("null")){
		//									tmp_uploadFileThumbnailImg = null;
		//								}else{
		////									Log.d(TAG,"thumbnailUrl::"+tmp_thumbnailUrl);
		//									tmp_uploadFileThumbnailImg = LoadImage(tmp_thumbnailUrl);
		////									tmp_uploadFileThumbnailImg = null;
		//								}
		//							}catch(Exception e){
		//								tmp_thumbnailUrl = "";
		//								tmp_uploadFileThumbnailImg = null;
		//							}
		//							try{
		//								tmp_profileImageUrl = jsonObj.getString("profileImageUrl");
		//								if(tmp_profileImageUrl==null||tmp_profileImageUrl.length()<1||tmp_profileImageUrl.equals("null")){
		//									tmp_profileImg = null;
		//								}else{
		////									Log.d(TAG,"tmp_profileImageUrl::"+tmp_profileImageUrl);
		////									tmp_profileImg = LoadImage(tmp_profileImageUrl);
		//									tmp_profileImg = null;
		//								}
		//							}catch(Exception e){
		//								tmp_profileImageUrl = "";
		//								tmp_profileImg = null;
		//							}
		//							try{
		//								tmp_profileThumbnailUrl = jsonObj.getString("profileThumbnailUrl");
		//								if(tmp_profileThumbnailUrl==null||tmp_profileThumbnailUrl.length()<1||tmp_profileThumbnailUrl.equals("null")){
		//									tmp_profileThumbnailImg = null;
		//								}else{
		//									if(!(tmp_pushChatUserMemberId.equals(pushChatMember.getMemberId()))){	// 상대방의 것만.
		//										if(tmp_prevImageUrl.equals(tmp_profileThumbnailUrl)){	// 기존 것과 같으면 그대로 사용
		//											tmp_profileThumbnailImg = tmp_prevImage;
		//										}else{
		////											Log.d(TAG,"tmp_profileThumbnailUrl::"+tmp_profileThumbnailUrl);
		//											tmp_prevImageUrl = tmp_profileThumbnailUrl;		// 기존것과 다르다면 새로 조회
		//											tmp_prevImage = LoadImage(tmp_prevImageUrl);
		//											tmp_profileThumbnailImg = tmp_prevImage;
		//										}
		//									}
		//								}
		//							}catch(Exception e){
		//								tmp_profileThumbnailUrl = "";
		//								tmp_profileThumbnailImg = null;
		//							}
		//							entries1.add(new PushChatMessage(
		//									tmp_pushChatUserMemberId,
		//									tmp_content,
		//									tmp_registerDate,
		//									tmp_nickName,
		//									tmp_profileImageUrl,
		//									tmp_profileThumbnailUrl,
		//									tmp_profileImg,
		//									tmp_profileThumbnailImg,
		//									tmp_myMessageYn,
		//									tmp_thumbnailUrl,
		//									tmp_uploadFileThumbnailImg,
		//									tmp_fileUrl,
		//									tmp_uploadFileImg
		//							));
		//						}
		//					}
		//				}catch (JSONException e) {
		//					e.printStackTrace();
		//				}
		//				entriesFn = entries1; 
		//			}
		//			isRunning = 0;		
		//			hidePb();
		//			showInfo();
	}


	/**
	 * 채팅 메시지에 이미지를 로드해서 저장해준다.			UsedMarketChatMessage usedMarketChatMessage
	 * @param tempUsedMarketChatMessage
	 * @return
	 */
	public UsedMarketChatMessage setImageToMessage(UsedMarketChatMessage tempUsedMarketChatMessage){
		
		String temp_url = "";
		temp_url = tempUsedMarketChatMessage.getThumbnailSmall();
		if(!(temp_url.length()<1)){
			temp_url = CommonConstant.messageImgPathThumbSmall + temp_url; 
			try{			
				tempUsedMarketChatMessage.setUploadFileThumbnailImg(LoadImage(temp_url, true));		// 메시지 이미지도 라운딩 처리.
			}catch(Exception e){
				e.printStackTrace();
			}
		}		
//		//			try{
//		//				temp_url = tempPushChatMessage.getProfileImageUrl();
//		//				if(!(temp_url==null||temp_url.length()<1||temp_url.equals("null"))){
//		//					try{
//		//						tempPushChatMessage.setProfileImg(LoadImage(temp_url));
//		//					}catch(Exception e){
//		//						e.printStackTrace();
//		//					}
//		//				}
//		//			}catch(Exception e){
//		//				e.printStackTrace();
//		//			}
//		try{
//			temp_url = tempUsedMarketChatMessage.getProfileThumbnailUrl();
//			if(!(temp_url==null||temp_url.length()<1||temp_url.equals("null"))){
//				if(!(tempUsedMarketChatMessage.getUsedMarketChatUserIdUsedMarketChatUser().equals(usedMarketChatUserMyInfo.getIdUsedMarketChatUser()))){	// 상대방의 것만.
//					//				if(!(tempPushChatMessage.getPushChatUserMemberId().equals(pushChatMember.getMemberId()))){	// 상대방의 것만.
//					if(tmp_prevImageUrl.equals(temp_url)){	// 기존 것과 같으면 그대로 사용
//						tempUsedMarketChatMessage.setProfileThumbnailImg(tmp_prevImage);
//					}else{
//						tmp_prevImageUrl = temp_url;		// 기존것과 다르다면 새로 조회
//						tmp_prevImage = LoadImage(temp_url, true);
//						tempUsedMarketChatMessage.setProfileThumbnailImg(tmp_prevImage);
//					}
//				}
//			}
//		}catch(Exception e){
//			e.printStackTrace();
//		}
		return tempUsedMarketChatMessage;
	}


	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////		

	

	/**
	 * null 체크하여 처리
	 */
	public String checkNull(String str){
		if(str==null || str.equals("null")){
			return "";
		}
		return str;
	}
	

	/**
	 * 데이터를 pref 에 저장한다. - (사진 촬영후 기존 메모리 손실 이슈)
	 */
	public void saveServerDataToPreference(){
		SharedPreferences.Editor saveToPref = sharedPrefCustom.edit();
		saveToPref.putString("currentIdUsedMarketChatUser", usedMarketChatUserMyInfo.getIdUsedMarketChatUser());			   			
		saveToPref.putString("currentUsedMarketChatIdUsedMarketChat", usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketChat());			   			
		saveToPref.putString("currentUsedMarketChatIdUsedMarketProduct", usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketProduct());			
		saveToPref.putString("currentUsedMarketChatOwner", usedMarketChatUserMyInfo.getUsedMarketChatOwner());		
		saveToPref.commit();
	}
	/**
	 * 데이터를 pref 에서 꺼낸다.
	 */
	public boolean readServerDataFromPreference(){
		phoneNum = sharedPrefCustom.getString("phoneNum", "");
		usedMarketChatUserMyInfo.setPhoneNumber(phoneNum);
		usedMarketChatUserMyInfo.setIdUsedMarketChatUser(sharedPrefCustom.getString("currentIdUsedMarketChatUser", ""));	
		usedMarketChatUserMyInfo.setUsedMarketChatIdUsedMarketChat(sharedPrefCustom.getString("currentUsedMarketChatIdUsedMarketChat", ""));	
		usedMarketChatUserMyInfo.setUsedMarketChatIdUsedMarketProduct(sharedPrefCustom.getString("currentUsedMarketChatIdUsedMarketProduct", ""));	
		usedMarketChatUserMyInfo.setUsedMarketChatOwner(sharedPrefCustom.getString("currentUsedMarketChatOwner", ""));	
		if(usedMarketChatUserMyInfo.getUsedMarketChatIdUsedMarketChat().length()>0){
			return true;
		}else {
			return false;
		}
	}


	/**
	 * titleChange
	 *  타이틀 변경 화면에 적용한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void titleChange(){
		//  가져온 데이터로 화면타이틀을 변경한다.
		UsedMarketChatRoomActivity.this.runOnUiThread(new Runnable(){		 
			@Override
			public void run(){
				Message message = handler.obtainMessage();
				Bundle b = new Bundle();
				b.putInt("titleChange", 1);
				message.setData(b);
				handler.sendMessage(message);
			}
		});
	}

	//		/**
	//		 * showUploadImage
	//		 *  업로드 이미지 크게 보기
	//		 *
	//		 * @param
	//		 * @param
	//		 * @return
	//		 */
	//		public void showUploadImage(){
	//			
	//			UsedMarketChatRoomActivity.this.runOnUiThread(new Runnable(){		 
	//				@Override
	//				public void run(){
	//					Message message = handler.obtainMessage();
	//					Bundle b = new Bundle();
	//					b.putInt("showUploadImage", 1);
	//					message.setData(b);
	//					handler.sendMessage(message);
	//				}
	//			});
	//		}

	/**
	 * showInfo
	 *  결과를 화면에 뿌려준다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void showInfo(){
		hidePb();
		//  가져온 데이터 화면에 보여주기.
		UsedMarketChatRoomActivity.this.runOnUiThread(new Runnable(){		 
			@Override
			public void run(){
				Message message = handler.obtainMessage();
				Bundle b = new Bundle();
				b.putInt("showYN", 1);
				message.setData(b);
				handler.sendMessage(message);
			}
		});
	}
	/**
	 * hideInfo
	 *  일단 화면을 숨긴다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void hideInfo(){
		hidePb();
		UsedMarketChatRoomActivity.this.runOnUiThread(new Runnable(){		 
			@Override
			public void run(){
				Message message = handler.obtainMessage();
				Bundle b = new Bundle();
				b.putInt("showYN", 2);
				message.setData(b);
				handler.sendMessage(message);
			}
		});
	}


	/**
	 * returnThis
	 *  컨택스트 반환한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public Context returnThis(){
		return this;
	}

	// 이미지 처리
	// 가맹점 이미지 URL 에서 이미지 받아와서 도메인에 저장하는 부분.
	/**
	 * LoadImage
	 *  이미지 URL 에서 이미지 받아온 스트림을 비트맵으로 저장한다  + 라운딩 처리.
	 *
	 * @param $imagePath
	 * @param
	 * @return bm
	 */
	private Bitmap LoadImage( String $imagePath, boolean IMAGE_ROUND_SETTING ) {
		InputStream inputStream = OpenHttpConnection( $imagePath ) ;
		Bitmap bm = BitmapFactory.decodeStream( inputStream ) ;
		if(IMAGE_ROUND_SETTING){
			bm = commonUtil.getRoundedCornerBitmap(bm);	// 라운딩 처리
		}
		return bm;
	}
	/**
	 * OpenHttpConnection
	 *  이미지 URL 에서 이미지 받아와서 스트림으로 저장한다
	 *
	 * @param $imagePath
	 * @param
	 * @return stream
	 */
	private InputStream OpenHttpConnection(String $imagePath) {
		// TODO Auto-generated method stub
		InputStream stream = null ;
		try {
			URL url = new URL( $imagePath ) ;
			HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection() ;
			urlConnection.setRequestMethod( "GET" ) ;
			urlConnection.connect() ;
			if( urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK ) {
				stream = urlConnection.getInputStream() ;
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return stream ;
	}


	/*
	 * 핸들러 파트.
	 *  화면상의 변화가 있는 요청은 핸들러를 사용
	 */
	/**
	 * showMsg
	 *  화면에 토스트 띄움 msg 변수에 내용을 넣어서 호출하면 화면에 토스트를 띄운다.
	 *
	 * @param msg
	 * @param
	 * @return
	 */
	public void showMsg(final String msg){		
		UsedMarketChatRoomActivity.this.runOnUiThread(new Runnable(){		 
			@Override
			public void run(){
				Message message = handler.obtainMessage();				
				Bundle b = new Bundle();
				b.putInt("showToast", 1);
				b.putString("msg", msg);
				message.setData(b);
				handler.sendMessage(message);
			}
		});
	} 
	/**
	 * showAlert
	 * 얼럿창을 띄운다
	 *
	 * @param msg
	 * @param 
	 * @return 
	 */
	public void showAlert(final String msg){
		UsedMarketChatRoomActivity.this.runOnUiThread(new Runnable(){		 
			@Override
			public void run(){
				Message message = handler.obtainMessage();				
				Bundle b = new Bundle();
				b.putInt("showAlert", 1);
				b.putString("msg", msg);			// 화면에 보여줄 메시지
				message.setData(b);
				handler.sendMessage(message);
			}
		});
	}
	/**
	 * showMSG
	 *  화면에 error 토스트 띄운다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void showMSG(){			// 화면에 error 토스트 띄움..
		new Thread(
				new Runnable(){
					public void run(){
						Message message = handler.obtainMessage();				
						Bundle b = new Bundle();
						b.putInt("showErrToast", 1);
						message.setData(b);
						handler.sendMessage(message);
					}
				}
		).start();
	} 
	/**
	 * showResultDialog
	 *  (얼럿 띄운다)
	 *
	 * @param msg
	 * @param
	 * @return
	 */

	public void showResultDialog(final String msg){
		UsedMarketChatRoomActivity.this.runOnUiThread(new Runnable(){		 
			@Override
			public void run(){
				Message message = handler.obtainMessage();				
				Bundle b = new Bundle();
				b.putInt("showAlert", 1);
				b.putString("msg", msg);			// 화면에 보여줄 메시지
				message.setData(b);
				handler.sendMessage(message);
			}
		});
	}

	/**
	 * initTextField
	 *  입력창 초기화
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void initTextField(){
		UsedMarketChatRoomActivity.this.runOnUiThread(new Runnable(){		 
			@Override
			public void run(){
				Message message = handler.obtainMessage();
				Bundle b = new Bundle();
				b.putInt( "initTextField" , 1);
				message.setData(b);
				handler .sendMessage(message);
			}
		});
	}

	// 중앙 프로그래스바 보임, 숨김
	/**
	 * showPb
	 *  중앙 프로그래스바 가시화한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void showPb(){
		UsedMarketChatRoomActivity.this.runOnUiThread(new Runnable(){		  
			@Override
			public void run(){
				Message message = handler .obtainMessage();
				Bundle b = new Bundle();
				b.putInt( "order" , 1);
				message.setData(b);
				handler .sendMessage(message);
			}
		});
	}
	/**
	 * hidePb
	 *  중앙 프로그래스바 비가시화한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void hidePb(){
		UsedMarketChatRoomActivity.this.runOnUiThread(new Runnable(){		 
			@Override
			public void run(){
				Message message = handler .obtainMessage();
				Bundle b = new Bundle();
				b.putInt( "order" , 2);
				message.setData(b);
				handler .sendMessage(message);
			}
		});
	}

	/**
	 * 소프트키보드를 숨긴다.
	 */
	public void hideKeypad(){
		imm.hideSoftInputFromWindow(chatRoomTitle.getWindowToken(), 0);
	}


	//		/**
	//		 * onBackPressed
	//		 * @param
	//		 * @param
	//		 * @return
	//		 */
	@Override
	public void onBackPressed() {
		Log.i(TAG, "onBackPressed");
		SharedPreferences.Editor saveChatRoomStatusPref = sharedPrefCustom.edit();
		saveChatRoomStatusPref.putBoolean("chatRoomUsingYn", false);			   		// 채팅방 사용중. (푸시를 통한 리프레시 기능을 위해 필요)	
		saveChatRoomStatusPref.putString("currentChatRoomId", "");		//  위의 두 값이 바뀐후 리프레시한다면 채팅방이 바뀌는 효과.(타이틀도 바꿔야)
		saveChatRoomStatusPref.putString("currentChatRoomOwner", "");	//  그에 따른 변수도 함께 바껴야 (최초 조회 여부 관련) 	
		saveChatRoomStatusPref.commit();
		super.onBackPressed();
		//			finish();
	}
	@Override
	public void onDestroy(){
		Log.i(TAG, "finish");
		SharedPreferences.Editor saveChatRoomStatusPref = sharedPrefCustom.edit();
		saveChatRoomStatusPref.putBoolean("chatRoomUsingYn", false);			   		// 채팅방 사용중. (푸시를 통한 리프레시 기능을 위해 필요)	
		saveChatRoomStatusPref.putString("currentUsedMarketChatIdUsedMarketChat", "");		//  위의 두 값이 바뀐후 리프레시한다면 채팅방이 바뀌는 효과.(타이틀도 바꿔야)
		saveChatRoomStatusPref.putString("currentUsedMarketChatIdUsedMarketProduct", "");	//  그에 따른 변수도 함께 바껴야 (최초 조회 여부 관련) 	
		saveChatRoomStatusPref.putString("currentUsedMarketChatOwner", "");	//  그에 따른 변수도 함께 바껴야 (최초 조회 여부 관련) 	
		saveChatRoomStatusPref.commit();
		super.onDestroy();
		//			finish();
	}
}
